#include "tpclasseuso.h"
#include "flagdescriptor.h"

TpClasseUso::TpClasseUso() :
    Customizable(false)
{
    m_intflag = TpClasseUso::NONE;
	m_value = -1;
    m_set = false;
}

TpClasseUso::TpClasseUso(const double& cu)
{
    setFlagValue(cu);
}

TpClasseUso::TpClasseUso(const int& tpcu)
{
	setFlag(tpcu);
}

TpClasseUso::TpClasseUso(const TpClasseUso& classeuso)
{
    setCustom(classeuso.isCustom());
	m_value = classeuso.m_value;
	m_intflag = classeuso.m_intflag;
    m_set = classeuso.m_set;
}

TpClasseUso& TpClasseUso::operator=(const TpClasseUso& classeuso)
{
    setCustom(classeuso.isCustom());
    m_intflag = classeuso.m_intflag;
	m_value = classeuso.m_value;
    m_set = classeuso.m_set;
    return *this;
}

void  TpClasseUso::setFlag(const int& TpCu)
{
    switch (TpCu)
    {
    case TpClasseUso::NONE:
        m_intflag=TpClasseUso::NONE;
		m_value = -1;
        m_set = false; setCustom(false);
        break;
    case TpClasseUso::CLASSE_1:
        m_intflag=TpClasseUso::CLASSE_1;
		m_value = 0.7;
        m_set = true; setCustom(false);
        break;
    case TpClasseUso::CLASSE_2:
        m_intflag=TpClasseUso::CLASSE_2;
		m_value = 1.0;
        m_set = true; setCustom(false);
        break;
    case TpClasseUso::CLASSE_3:
        m_intflag=TpClasseUso::CLASSE_3;
		m_value = 1.5;
        m_set = true; setCustom(false);
        break;
    case TpClasseUso::CLASSE_4:
        m_intflag=TpClasseUso::CLASSE_4;
		m_value = 2.0;
        m_set = true; setCustom(false);
        break;
    }
}

bool  TpClasseUso::setFlag(const string& str)
{
    if (str.compare("NONE")==0)
    {
        m_intflag = TpClasseUso::NONE;
		m_value = -1;
        m_set = false; setCustom(false);
    }
    else if (str.compare("CLASSE_1")==0)
    {
        m_intflag = TpClasseUso::CLASSE_1;
		m_value = 0.7;
        m_set = true; setCustom(false);
    }
    else if (str.compare("CLASSE_2")==0)
    {
        m_intflag = TpClasseUso::CLASSE_2;
		m_value = 1.0;
        m_set = true; setCustom(false);
    }
    else if (str.compare("CLASSE_3")==0)
    {
        m_intflag = TpClasseUso::CLASSE_3;
		m_value = 1.5;
        m_set = true; setCustom(false);
    }
    else if (str.compare("CLASSE_4")==0)
    {
        m_intflag = TpClasseUso::CLASSE_4;
		m_value = 2.0;
        m_set = true; setCustom(false);
    }
    else
    {
        return(false);
    }
    return(true);
}

string	TpClasseUso::getFlagStr(void) const
{
    switch (m_intflag)
    {
    case TpClasseUso::NONE:
		return("---");
    case TpClasseUso::CLASSE_1:
        return("CLASSE_1");
    case TpClasseUso::CLASSE_2:
        return("CLASSE_2");
    case TpClasseUso::CLASSE_3:
        return("CLASSE_3");
    case TpClasseUso::CLASSE_4:
        return("CLASSE_4");
    }
    return("NONE");
}

int TpClasseUso::setFlagValue(const double& cu)
{
    setCustom(true);
	m_value = cu;
    m_intflag = NONE;
    m_set = true;
    return 1;
}

string TpClasseUso::getFlagDescription( ExaTextFormat format ) const
{
    return FlagDescriptor::getFlagDescription( *this, format );;
}
